package utils

import (
	"SE/Response"
	"SE/middleware"
	"github.com/dgrijalva/jwt-go"
	"github.com/gin-gonic/gin"
	"time"
)

// CreateToken 生成并返回一个JWT token
func CreateToken(c *gin.Context, Id int, NickName string, Role int) string {
	// 初始化JWT实例
	j := middlewares.NewJWT()

	// 创建自定义声明
	claims := middlewares.CustomClaims{
		ID:          uint(Id),   // 用户ID
		NickName:    NickName,   // 用户昵称
		AuthorityId: uint(Role), // 用户角色
		StandardClaims: jwt.StandardClaims{
			NotBefore: time.Now().Unix(),               // token生效时间
			ExpiresAt: time.Now().Unix() + 60*60*24*30, // token过期时间，设置为30天后
			Issuer:    "test",                          // token发行者
		},
	}

	// 使用声明生成token
	token, err := j.CreateToken(claims)
	if err != nil {
		// 如果生成token失败，返回错误信息
		Response.Success(c, 401, "token生成失败,重新再试", "test")
		return ""
	}

	// 返回生成的token
	return token
}
